home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / xyreg.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  5KB  |  178 lines

  1. /*      @(#)xyreg.h 1.1 86/09/27 SMI      */
  2.  
  3. /*
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6. #ifndef _XYREG_
  7. #define _XYREG_
  8.  
  9. /*
  10.  * Xylogics 450 declarations
  11.  */
  12.  
  13. /*
  14.  * IOPB - in real memory so we can use bit fields
  15.  */
  16. struct xyiopb {
  17.     /* Byte 1 */
  18.     u_char           : 1;
  19.     u_char    xy_intrall : 1;    /* interrupt on all iopbs (450) */
  20.     u_char    xy_intrerr : 1;    /* interrupt on error */
  21.     u_char    xy_reserve : 1;    /* reserve dual port drive (450) */
  22.     u_char    xy_recal   : 1;    /* recalibrate on seek errors (450) */
  23.     u_char    xy_enabext : 1;    /* enable extensions (450) */
  24.     u_char    xy_eccmode : 2;    /* ECC actions */
  25.     /* Byte 0 */
  26.     u_char    xy_autoup  : 1;    /* auto update of IOPB */
  27.     u_char    xy_reloc   : 1;    /* use relocation */
  28.     u_char    xy_chain   : 1;    /* command chaining */
  29.     u_char    xy_ie      : 1;    /* interrupt enable */
  30.     u_char    xy_cmd     : 4;    /* command */
  31.     /* Byte 3 */
  32.     u_char    xy_errno;    /* error number */
  33.     /* Byte 2 */    
  34.     u_char    xy_iserr   : 1;    /* error indicator */
  35.     u_char           : 2;
  36.     u_char    xy_ctype   : 3;    /* controller type */
  37.     u_char           : 1;
  38.     u_char    xy_complete: 1;    /* completion code valid (450) */
  39.     /* Byte 5 */
  40.     u_char    xy_drive   : 2;    /* drive type */
  41.     u_char           : 4;
  42.     u_char    xy_unit    : 2;    /* unit number */
  43.     /* Byte 4 */
  44.     u_char    xy_bytebus : 1;    /* use byte transfers */
  45.     u_char    xy_intrlv  : 4;    /* interleave - 1 (450) */
  46.     u_char    xy_throttle: 3;    /* throttle control */
  47.     u_char    xy_sector;    /* 7: sector number */
  48.     u_char    xy_head;    /* 6: head number */
  49.     u_short    xy_cylinder;    /* 9,8: cylinder number */
  50.     u_short    xy_nsect;    /* b,a: sector count */
  51. #define    xy_status xy_nsect    /* low byte is status */
  52.     u_short    xy_bufoff;    /* d,c: buffer offset */
  53.     u_short    xy_bufrel;    /* f,e: buffer relocation */
  54.     u_char    xy_subfunc;    /* 11: subfunction */
  55.     u_char    xy_bhead;    /* 10: base head (450) */
  56.     u_short    xy_nxtoff;    /* 13,12: next iopb offset */
  57.     u_short    xy_eccpatt;    /* 15,14: ECC pattern */
  58.     u_short    xy_eccaddr;    /* 17,16: ECC address */
  59. };
  60.  
  61. /*
  62.  * Commands -- the values are shifted by a byte so they can be folded
  63.  * with the subcommands into a single variable.
  64.  */
  65. #define    XY_NOP        0x000    /* nop */
  66. #define    XY_WRITE    0x100    /* write */
  67. #define    XY_READ        0x200    /* read */
  68. #define    XY_WRITEHDR    0x300    /* write headers */
  69. #define    XY_READHDR    0x400    /* read headers */
  70. #define    XY_SEEK        0x500    /* seek */
  71. #define    XY_RESTORE    0x600    /* drive reset */
  72. #define    XY_FORMAT    0x700    /* format */
  73. #define    XY_READALL    0x800    /* read all */
  74. #define    XY_STATUS    0x900    /* drive status */
  75. #define    XY_WRITEALL    0xa00    /* write all */
  76. #define    XY_INIT        0xb00    /* initialize drive */
  77. #define    XY_TEST        0xc00    /* self test */
  78. #define XY_BUFLOAD    0xe00    /* buffer load */
  79. #define XY_BUFDUMP    0xf00    /* buffer dump */
  80.  
  81. /*
  82.  * Subcommands
  83.  */
  84.     /*
  85.      * readall
  86.      */
  87. #define XY_RDHDE    0x00    /* read header, data and ecc */
  88. #define XY_DEFLST    0x01    /* read defect list */
  89.  
  90. /*
  91.  * xy_status bits
  92.  */
  93. #define    XY_ONCYL    0x80        /* true if zero */
  94. #define    XY_READY    0x40        /* true if zero */
  95. #define    XY_WRPOT    0x20
  96. #define    XY_RSVRD    0x10
  97. #define    XY_SKERR    0x08
  98. #define    XY_FAULT    0x04
  99.  
  100. /*
  101.  * Error codes
  102.  */
  103. #define    XYE_OK        0x00        /* command succeeded */
  104. #define    XYE_IPND    0x01        /* interrupt pending */
  105. #define    XYE_BCON    0x03        /* busy conflict */
  106. #define XYE_OPTO    0x04        /* operation timeout */
  107. #define XYE_HDNF    0x05        /* header not found */
  108. #define    XYE_HECC    0x06        /* hard ecc error */
  109. #define XYE_CADR    0x07        /* cylinder addr error */
  110. #define    XYE_SLIP    0x09        /* sector slip error */
  111. #define    XYE_SADR    0x0a        /* sector addr error */
  112. #define    XYE_2SML    0x0d        /* last sector too small */
  113. #define    XYE_MADR    0x0e        /* memory addr error */
  114. #define    XYE_HDER    0x12        /* cylinder & head header error */
  115. #define    XYE_SRTY    0x13        /* seek retry */
  116. #define    XYE_PROT    0x14        /* write protect error */
  117. #define    XYE_ILLC    0x15        /* unimplemented command */
  118. #define    XYE_NRDY    0x16        /* drive not ready */
  119. #define    XYE_0CNT    0x17        /* zero sector count */
  120. #define    XYE_DFLT    0x18        /* drive fault */
  121. #define    XYE_SSIZ    0x19        /* illegal sector size */
  122. #define    XYE_TSTA    0x1a        /* self test error a */
  123. #define    XYE_TSTB    0x1b        /* self test error b */
  124. #define    XYE_TSTC    0x1c        /* self test error c */
  125. #define    XYE_SECC    0x1e        /* soft ecc error */
  126. #define    XYE_FECC    0x1f        /* fixed ecc error */
  127. #define    XYE_HADR    0x20        /* head addr error */
  128. #define    XYE_DSEQ    0x21        /* disk sequencer error */
  129. #define    XYE_SEEK    0x25        /* drive seek error */
  130. #define    XYE_LINT    0x26        /* lost interrupt */
  131. #define    XYE_ERR        0x2a        /* hard error */
  132. #define    XYE_DERR    0x2b        /* double hard error */
  133. #define    XYE_UNKN    0xff        /* unknown error */
  134.  
  135. /*
  136.  * Miscellaneous defines.
  137.  */
  138. #define XY_THROTTLE    4        /* 32 words/transfer */
  139. #define    NXYDRIVE    4        /* 4 possible drive types */
  140. #define XYUNPERC    4        /* max # of units per controller */
  141.  
  142. /*
  143.  * Structure definition and macros used for a sector header
  144.  */
  145. #define XY_HDRSIZE    4        /* bytes/sector header */
  146.  
  147. struct xyhdr {
  148.     /* Byte 1 */
  149.     u_char    xyh_sec_hi : 2;
  150.     u_char           : 3;
  151.     u_char    xyh_cyl_hi : 3;
  152.     /* Byte 0 */
  153.     u_char    xyh_cyl_lo;
  154.     /* Byte 3 */
  155.     u_char    xyh_type   : 2;
  156.     u_char    xyh_sec_lo : 6;
  157.     /* Byte 2 */
  158.     u_char    xyh_head;
  159. };
  160.  
  161. #define    XY_CYL_LO(n)    ((int)(n)&0xff)
  162. #define    XY_CYL_HI(n)    (((int)(n)&0x700)>>8)
  163. #define    XY_SEC_LO(n)    ((int)(n)&0x3f)
  164. #define    XY_SEC_HI(n)    (((int)(n)&0xc0)>>6)
  165. #define    XY_GET_SEC(h)    (((h)->xyh_sec_hi<<6)|((h)->xyh_sec_lo))
  166. #define    XY_GET_CYL(h)    (((h)->xyh_cyl_hi<<8)|((h)->xyh_cyl_lo))
  167.  
  168. /*
  169.  * Layout for Read and Write of header, data, and ECC
  170.  */
  171. struct xyrec {
  172.     struct    xyhdr xyr_hdr;    /* header */
  173.     char    xyr_data[512];    /* data */
  174.     u_long    xyr_ecc;    /* ECC value */
  175. };
  176.  
  177. #endif _XYREG_
  178.